#ifndef MATRIX_H_INCLUDED
#define MATRIX_H_INCLUDED

#include <iostream>

#include "vector.h"

class Matrix {
    friend std::ostream & operator<<( std::ostream &, const Matrix & );
public:
    Matrix( void );
    Matrix( float * );
    float at( unsigned int ) const;
    float at( unsigned int, unsigned int ) const;
    float & operator[]( unsigned int );
    void set( unsigned int, unsigned int, float );
    Matrix operator*( const Matrix &) const;
    Vector operator*( const Vector & ) const;
    Matrix & operator*=( const Matrix & );
    bool operator==( const Matrix & ) const;
    bool equals( const Matrix &, float ) const;
private:
    float data[16];
};

#endif // MATRIX_H_INCLUDED
